const fs = require('fs');
const crypto = require('crypto');

// 加密函数
function encryptFile(filePath, password, algorithm = 'aes-256-cbc') {
  try {
    // 读取文件内容
    const fileData = fs.readFileSync(filePath, 'utf8');

    // 创建加密密钥
    const key = crypto.scryptSync(password, 'salt', 32);
    const iv = crypto.randomBytes(16);

    // 创建加密器
    const cipher = crypto.createCipheriv(algorithm, key, iv);

    // 加密数据
    let encrypted = cipher.update(fileData, 'utf8', 'hex');
    encrypted += cipher.final('hex');

    // 返回IV和加密数据组合的字符串
    return iv.toString('hex') + ':' + encrypted;
  } catch (err) {
    console.error('加密失败:', err);
    return null;
  }
}

// 解密函数
function decryptFile(encryptedData, password, algorithm = 'aes-256-cbc') {
  try {
    // 分离IV和加密数据
    const parts = encryptedData.split(':');
    const iv = Buffer.from(parts[0], 'hex');
    const encryptedText = parts[1];

    // 创建解密密钥
    const key = crypto.scryptSync(password, 'salt', 32);

    // 创建解密器
    const decipher = crypto.createDecipheriv(algorithm, key, iv);

    // 解密数据
    let decrypted = decipher.update(encryptedText, 'hex', 'utf8');
    decrypted += decipher.final('utf8');

    return decrypted;
  } catch (err) {
    console.error('解密失败:', err);
    return null;
  }
}

// 使用示例
const filePath = 'D:\\华为家庭存储\\PrivateSpace\\Audiovisual\\index.json';
const password = '我的爱是田红满';

// 加密文件
const encrypted = encryptFile(filePath, password);
console.log('加密结果:', encrypted);

// 解密文件
if (encrypted) {
  fs.writeFileSync(`D:\\ZiShenKongJian\\rml-backups\\SecretData\\Audiovisual_index.txt`, encrypted);
  // const decrypted = decryptFile(encrypted, password);
  // console.log('解密结果:', decrypted);
}
